// const str = 'hello'

// // const ss = str.concat('world')
// // console.log(ss);

// // const s1 = str.substring(1)
// // console.log(s1);

// const s2 = str.replace('l', 'L')
// console.log(s2);


// let a = 11111111111111111111111111111;
// let b = 1;

// // const a = '1232876542313425857'
// // const b = '7654231234'

// // function add(n, m) {
// //     const strm = m.toString()
// //     const strn = n.toString()
// //     let lenm = strm.length
// //     let lenn = strn.length
// //     if (lenm > lenn) {
// //         n.padStart(lenm, '0')
// //     } else {
// //         m.padStart(lenn, '0')
// //     }

// //     let cur = 0
// //     for (let i = lenm - 1; i >= 0; i--) {
// //         let n1 = toNmber(m[i]);
// //         let n2 = toNmber(n[i]);
// //         let n3 = n1 + n2 + cur;
// //         if(n> 9){
// //             cur = 1;
// //             n3 -= 10;
// //         }
// //         m[i] = n3.toString()
// //     }

// // }


// // 把a 转化为数组保存
// const aArr = a.toString().split('')
// const bArr = b.toString().split('')

// console.log(aArr);
// console.log(bArr);



// // console.log(add(n, m));


// 手动实现BigInt类型
class MyBigInt {
    constructor(value) {
        // 处理输入值，转换为字符串存储
        if (typeof value === 'number') {
            this.value = value.toString();
        } else if (typeof value === 'string') {
            // 移除字符串中的非数字字符
            this.value = value.replace(/[^0-9-]/g, '');
        } else {
            this.value = '0';
        }

        // 处理符号
        this.isNegative = this.value.startsWith('-');
        if (this.isNegative) {
            this.value = this.value.slice(1);
        } else if (this.value === '') {
            this.value = '0';
        }

        // 移除前导零
        this.value = this.value.replace(/^0+/, '') || '0';
    }

    // 加法运算
    add(other) {
        if (!(other instanceof MyBigInt)) {
            other = new MyBigInt(other);
        }

        // 处理符号相同的情况
        if (this.isNegative === other.isNegative) {
            const result = this._addAbsoluteValues(this.value, other.value);
            return new MyBigInt((this.isNegative ? '-' : '') + result);
        } else {
            // 处理符号不同的情况
            const absThis = this.value;
            const absOther = other.value;
            let result;
            let isNegative;

            if (this._compareAbsoluteValues(absThis, absOther) >= 0) {
                result = this._subtractAbsoluteValues(absThis, absOther);
                isNegative = this.isNegative;
            } else {
                result = this._subtractAbsoluteValues(absOther, absThis);
                isNegative = other.isNegative;
            }

            return new MyBigInt((isNegative ? '-' : '') + result);
        }
    }

    // 内部方法：两个正数相加
    _addAbsoluteValues(a, b) {
        // 确保a是较长的数
        if (a.length < b.length) {
            [a, b] = [b, a];
        }

        // 补齐b的长度
        b = b.padStart(a.length, '0');

        let result = '';
        let carry = 0;

        // 从右往左相加
        for (let i = a.length - 1; i >= 0; i--) {
            const sum = parseInt(a[i]) + parseInt(b[i]) + carry;
            carry = Math.floor(sum / 10);
            result = (sum % 10) + result;
        }

        // 处理最后的进位
        if (carry > 0) {
            result = carry + result;
        }

        return result;
    }

    // 内部方法：两个正数相减（假设a >= b）
    _subtractAbsoluteValues(a, b) {
        // 补齐b的长度
        b = b.padStart(a.length, '0');

        let result = '';
        let borrow = 0;

        // 从右往左相减
        for (let i = a.length - 1; i >= 0; i--) {
            let diff = parseInt(a[i]) - parseInt(b[i]) - borrow;
            if (diff < 0) {
                diff += 10;
                borrow = 1;
            } else {
                borrow = 0;
            }
            result = diff + result;
        }

        // 移除前导零
        result = result.replace(/^0+/, '') || '0';

        return result;
    }

    // 内部方法：比较两个正数的大小
    _compareAbsoluteValues(a, b) {
        if (a.length !== b.length) {
            return a.length - b.length;
        }
        return a.localeCompare(b);
    }

    // 转换为字符串
    toString() {
        return (this.isNegative ? '-' : '') + this.value;
    }

    // 转换为数字（可能会丢失精度）
    valueOf() {
        return parseInt(this.toString());
    }
}

// 测试代码
const a = new MyBigInt('11111111111111111111111111111');
const b = new MyBigInt('1');
const sum = a.add(b);
console.log('a =', a.toString());
console.log('b =', b.toString());
console.log('a + b =', sum.toString());